//package com.ashen.boot.admin.configuration.datascope;
//
//
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
//import com.ashen.boot.admin.project.system.role.model.entity.RoleEntity;
//import com.ashen.boot.admin.security.model.User;
//import com.ashen.boot.admin.security.utils.SecurityUtils;
//import com.okay.okayx.admin.api.entity.SysDeptRelation;
//import com.okay.okayx.admin.api.entity.SysRole;
//import com.okay.okayx.admin.api.entity.SysUser;
//import com.okay.okayx.admin.api.feign.RemoteDataScopeService;
//import com.okay.okayx.common.core.constant.SecurityConstants;
//import com.okay.okayx.common.security.service.OkayxUser;
//import com.okay.okayx.common.security.util.SecurityUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.core.GrantedAuthority;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Comparator;
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * @author xuxiang
// * @date 2021/0714
// */
//public class UserDatascopeHandle  implements DataScopeHandle {
//    @Autowired
//    private RemoteDataScopeService dataScopeService;
//
//    /**
//     * 计算用户数据权限
//     * @param userIdList
//     * @return
//     */
//    @Override
//    public Boolean calcScope(List<Integer> userIdList) {
//        User user =  SecurityUtils.getCurrentUser();
//        List<Integer> deptIds = new ArrayList<>();
//        List<String> roleIdList = user.getAuthorities().stream().map(GrantedAuthority::getAuthority)
//                .filter(authority -> authority.startsWith(SecurityConstants.ROLE))
//                .map(authority -> authority.split(StrUtil.UNDERLINE)[1]).collect(Collectors.toList());
//        // 当前用户的角色为空
//        if (CollectionUtils.isEmpty(roleIdList)) {
//            return false;
//        }
//        RoleEntity role = dataScopeService.getRoleList(roleIdList).getData().stream()
//                .min(Comparator.comparingInt(SysRole::getDsType)).orElse(null);
//        // 角色有可能已经删除了
//        if (role == null) {
//            return false;
//        }
//        Integer dsType = role.getDsType();
//        // 查询全部
//        if (DataScopeTypeEnum.ALL.getType() == dsType) {
//            return true;
//        }
//        // 自定义
//        if (DataScopeTypeEnum.CUSTOM.getType() == dsType &&  StringUtils.isNotBlank(role.getDsScope())) {
//            String dsScope = role.getDsScope();
//            deptIds.addAll(
//                    Arrays.stream(dsScope.split(StrUtil.COMMA)).map(Integer::parseInt).collect(Collectors.toList()));
//            userIdList = dataScopeService.getUserList(deptIds).getData().stream().map(SysUser::getUserId).collect(Collectors.toList());
//        }
//        // 查询本级及其下级
//        if (DataScopeTypeEnum.OWN_CHILD_LEVEL.getType() == dsType) {
//            deptIds = dataScopeService.getDescendantList(user.getDeptId()).getData().stream()
//                    .map(SysDeptRelation::getDescendant).collect(Collectors.toList());
//            userIdList = dataScopeService.getUserList(deptIds).getData().stream().map(SysUser::getUserId).collect(Collectors.toList());
//        }
//        // 只查询本级
//        if (DataScopeTypeEnum.OWN_LEVEL.getType() == dsType) {
//            Integer deptId = user.getDeptId();
//            deptIds.add(deptId);
//            userIdList = dataScopeService.getUserList(deptIds).getData().stream().map(SysUser::getUserId).collect(Collectors.toList());
//        }
//        // 只查询本级
//        if (DataScopeTypeEnum.OWN.getType() == dsType) {
//            userIdList.add(user.getId());
//        }
//
//        return false;
//    }
//}